Outline:
1. Introduction.
2. Auth0 Setup.
3. Connecting React with Auth0.
4. Rendering dribble profile.
5. Conclusion.
Introduction:
In this blog post, we will see how to add dribble social connection using Auth0 to our React application.

Auth0 Setup:
Create your Auth0 account if you have not created yet and head over to manage.auth0.com link. Please create a tenant if you are using it for the first time.
Click on the Applications navigation link and click on Create Application .

Give your application name and click on single page web application as we will be integrating it with React. I have named mine as Dribble dashboard.
Hit the create button.
Before adding dribble connection to the sample application. We need two things from dribble
Client Id and Client Secret.
Let's go to dribble and register our application.

When you click on Register your application, you will be redirected to your Dribble profile page with Applications tab active.

Give the name and description in the respective columns. Since we don't have the website url, let's give a placeholder https://example.com and for callback url your URL should be in this format.
https://YOUR_DOMAIN/login/callback
YOUR_DOMAIN can be found if you go to Applications -> <name of the application> , you will be find the domain name.
In my case the DOMAIN will be react-pluralsight.auth0.com and the url will be
https://react-pluralsight.auth0.com/login/callback
Construct your YOUR_DOMAIN likewise and add it in the callback_url and hit Register application.
Once done you will have access to Client ID and Client Secret. Hold on to them , we will be needing in the further part of the tutorial.
Now that we have sample application, let's add dribble connection.
Go to Authentication -> Social and click on Create Connection and Choose Dribble , you will be redirected to following page.

Click on continue and you will be redirected to the configuration page. Add the client ID and client secret which you got from the dribble application in the respective blocks and click Create.
Once done go to the applications tab and check your application.

Let's code.
Connecting React with Auth0
Let's create our react application using create-react-app . Run the below command.
npx create-react-app dribble-login
cd dribble-login
yarn start
Let's install Auth0 sdk , run the below command
yarn add @auth0/auth0-react
Create a .env file in the root and add the following variables and values. You can get client id and domain from applications -> settings

REACT_APP_CLIENT_ID=
REACT_APP_DOMAIN=
Restart your application , for env variables to be recognised.
Now go to src/index.js and add the following code
import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
import { Auth0Provider } from "@auth0/auth0-react";
ReactDOM.render(
<Auth0Provider
domain={process.env.REACT_APP_DOMAIN}
clientId={process.env.REACT_APP_CLIENT_ID}
redirectUri={window.location.origin}
>
<App />
</Auth0Provider>,
document.getElementById("root")
);
By wrapping Auth0Provider from the Auth0 SDK to the root component and passing the domain and clientId we can integrate Auth0 with our react app.
Let create a login button which will redirect Auth0 powered login splash screen. Create a dribble-login.js in src folder and paste the following code.
import React from "react";
import { useAuth0 } from "@auth0/auth0-react";
/*
Executing loginWithRedirect() redirects your users to the
Auth0 Universal Login Page, where Auth0 can authenticate them.
*/
const DribbleLogin = () => {
const { loginWithRedirect, isAuthenticated } = useAuth0();
if(!isAuthenticated){
return <button onClick={() => loginWithRedirect()}>Log In</button>;
}
return <> </>
export default DribbleLogin;
Now head over to the src/App.js and add the DribbleLogin component.
import DribbleLogin from './dribbleLogin';
function App() {
return (
<div className="App">
<DribbleLogin/>
</div>
);
}
export default App;
Now run yarn start and go to localhost:3000 or localhost:3001
You should see something like this, plain old login button. Click login button.

You will end up in a page saying , callback url mismatch
What did we miss,

Based on the error message , we did not configure the callback, allowed web origin and logout url.
What are those ?
Callback URL: URL in your application where Auth0 redirects the user after they have authenticated.
Allowed Web origin: Making sure the users does not logout the application when they visit them the next time or refresh the page
LogoutURL: URL in your application that Auth0 can return to after the user has been logged out of the authorization server
Go to settings and add localhost:3000 or localhost:3001 url since the app is in the development stage.
Note: port number can be different. Please add them accordingly and save the changes.

Since my react application is running on localhost:3001 , I will go to the url and run in the browser. Click the login button and now we should be able to see the splash screen as expected

After successful login with dribble , you will be redirected back to the react application with plain old login button.
Let's handle it by making sure to add the logout button and profile info to display after successful login
Rendering dribble profile
Create src/logout.js and logging out the user in the Auth0 can be done by calling logout function in the useAuth0 hook. Add the following code
import React from "react";
import { useAuth0 } from "@auth0/auth0-react";
const Logout = () => {
const { logout, isAuthenticated } = useAuth0();
if(isAuthenticated){
return (
<button onClick={() => logout({ returnTo: window.location.origin })}>
Log Out
</button>
);
}
return <> </>
};
export default Logout;
Create src/profile.js and add the following piece of code
import React from "react";
import { useAuth0 } from "@auth0/auth0-react";
const Profile = () => {
const { user, isAuthenticated, isLoading } = useAuth0();
if (isLoading) {
return <div>Loading ...</div>;
}
return (
isAuthenticated && (
<div style={{marginTop: '10px'}}>
<img src={user.picture} alt={user.name} />
<h2>{user.name}</h2>
<p>{user.email}</p>
<pre style={{whiteSpace: 'pre-wrap'}}>
{
JSON.stringify(user)
}
</pre>
</div>
)
);
};
export default Profile;
Here, again from useAuth0 hook we display the profile info based isAuthenticated boolean we display the profile information.
Now let's add the component in the App.js file and modify as shown below
import DribbleLogin from './dribbleLogin';
import Logout from './logout';
import Profile from './profile';
function App() {
return (
<div className="App">
<DribbleLogin/>
<Logout/>
<Profile/>
</div>
);
}
export default App;
Head over to the browser and hit reload, since we have already logged in we should successfully see the profile information displayed


Conclusion:
Thank you for following along till the end. By the end of the blog post , you should have sample react application connected to your dribble account , rendering the profile in the browser as expected.
Auth0 has took care all of the behind the scenes authentication and authorisation problem and reducing the scope of the problem for the to solve.

Hope it was useful. Please feel free to ask any questions in the comment. Feedbacks are always welcome.
Stay Safe and Happy Coding :)
Comments (0)